07 - Inferencja sieci neuronowej z wykorzystaniem Raspberry Pi i ONNX Runtime
Systemy Wbudowane i Przetwarzanie Brzegowe
Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej
Ćwiczenie laboratoryjne 7: Inferencja sieci neuronowej z wykorzystaniem Raspberry Pi i ONNX Runtime
Powrót do spisu treści ćwiczeń laboratoryjnych
ONNX Runtime
Biblioteka ONNX Runtime jest to projekt open-source rozwijany przez firmę Microsoft, który umożliwia optymalizację i akcelerację modeli uczenia maszynowego w formacie ONNX na różnych platformach sprzętowych. Pakiet ten wspiera obecnie następujące akceleratory:
NVIDIA CUDA | NVIDIA TensorRT | Intel OpenVIN | Intel oneDNN | Windows DirectML | Qualcomm - SNPE |
Android NNAPI | Apple CoreML | XNNPACK | AMD - MIGRraphX | AMD - ROCm | Cloud - Azure |
Arm - ACL | Arm - Arm NN | Apache - TVM | Rockchip - RKNPU | Xilinx - Vitis AI | Huawei - CANN |
Źródło grafiki: ONNX Runtime GitHub
Zadania do samodzielnej realizacji
Zadanie 1. Korzystając z polecenia
pip install onnxruntime
zainstaluj bibliotekę ONNX Runtime. Na podstawie instrukcji
z poprednich zajęć przygotuj skrypt pozwalający na inferencję sieci
neuronowej bezpośrednio na Raspberry Pi. Wykorzystując model w formacie
FLOAT 32 przetestuj działanie modelu na losowych danych, przy wsadzie
wejściowym (batch size) równym 1, i zmierz średni czas inferencji
przypadający na jedną próbkę danych przy 100 wywołaniach.
Zadanie 2. Przeprowadź powyższą analizę dla modeli w formacie FLOAT 16 oraz UINT 8. Pamiętaj o przekształceniu danych wejściowych do odpowiedniego formatu. Porównaj wyniki uzyskane dla modeli w różnych formatach. Czy można zauważyć znaczącą różnicę w czasie inferencji pomiędzy formatami?
Na podstawie wyników przeprowadzonej analizy przygotuj wykres słupkowy pokazujący zależność czasu inferencji od formatu modelu.
Zadanie 3. Przygotuj skrypt, który wykorzysta zdjęcie pobrane z kamery Raspberry Pi do przeprowadzenia segmentacji. Wyświetl otrzymane wyniki - zdjęcie z kamery oraz maskę segmentacji.
Zadanie 4. Zmodyfikuj skrypt tak aby możliwa była inferencja modelu na Raspberry Pi w czasie rzeczywistym przy użyciu kamery.
Materiały dodatkowe
Jak można zauważyć po powyższych ćwiczeniach, czasy wnioskowania sieci neuronowej na urządzeniu o ograniczonej mocy obliczeniowej jakim jest Raspberry Pi są znacznie dłuższe niż na komputerze stacjonarnym i w środowisku chmurowym. Niemniej jednak, zalety prztwarzania brzegowego są na tyle duże, że warto je stosować mimo takich ograniczeń. W sytuacji, gdy jednak czas wnioskowania jest krytyczny, można skorzystać z dodatkowych, zewnętrznych akceleratorów obliczeń. Jako najczęściej stosowane, dostępne na rynku rozwiązania można wymienić:
- Google Coral Edge TPU USB Accelerator
Google Coral Edge TPU USB Accelerator jest to koprocessor oparty o rdzeń Edge TPU służący do zrównoleglania i akceleracji obliczeń sieci neuronowych na urządzeniach brzegowych. Jak nazwa wskazuje, komunikacja odbywa się po interfejsie USB 3. Koprocessor został zaprojektowany tak, by był kompatybilny z biblioteką TensorFLow Lite. Urządzenie wspiera modele zkwantyzowane do 8 bitów w formacie INT8, a następnie skompilowane przy użyciu kompilatora Edge TPU Compiler.
Szczegółowe jak korzystać z koprocessora Google Coral Edge TPU USB Accelerator można znaleźć w dokumentacji: - Get started with the USB Accelerator, - TensorFlow models on the Edge TPU.
Źródło grafiki: The Coral USB Accelerator
- Intel Neural Compute Stick 2 (NCS2)
Intel Neural Compute Stick 2 to akcelerator USB oparty o układ obliczeniowy Intel® Movidius™ Myriad™ X Vision Processing Unit (VPU) przeznaczony do prototypowania i testowania rozwiązań opartych o sieci neuronowe (w szczególności o sieci konwolucyjne) na urządzeniach brzegowych takich jak np. Raspberry Pi. Domyślnie do konwersji algorytmu opartego o sieć neuronową wykorzystywane jest narzędzie OpenVINO, które wspiera konwersję, optymalizację oraz wdrożenie na urządzenia oparte o architekturę firmy Intel. Alternatywnie można skorzystać z biblioteki ONNX Runtime oraz z dostępnego w niej modułu OpenVINO™ Execution Provider.
Źródło grafiki: Intel® Neural Compute Stick 2 (Intel® NCS2)